package org.jboss.drools.guvnor.importgenerator.mojo; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.apache.commons.io.IOUtils; import org.apache.maven.artifact.DependencyResolutionRequiredException; import org.apache.maven.artifact.factory.ArtifactFactory; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.resolver.ArtifactNotFoundException; import org.apache.maven.artifact.resolver.ArtifactResolutionException; import org.apache.maven.artifact.resolver.ArtifactResolver; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.project.MavenProject; import org.jboss.drools.guvnor.importgenerator.Configuration; import org.jboss.drools.guvnor.importgenerator.ImportFileGenerator; /** * @goal generate */ public class ImportFileGeneratorMojo extends AbstractMojo implements Configuration{ /** @parameter expression="${generate.debug}" */ private String debug="true"; /** @parameter expression="${generate.debugExtra}" */ private String debugExtra="true"; /** @parameter expression="${generate.path}" */ private String path="rules"; /** @parameter expression="${generate.packageExclude}" */ private String packageExclude="[0-9|.]*[.|-]+[SNAPSHOT]+[.|-]*[09|.]*"; /** @parameter expression="${generate.recursive}" */ private String recursive="true"; /** @parameter expression="${generate.creator}" */ private String creator="admin"; /** @parameter expression="${generate.fileExtensions}" */ private String fileExtensions="drl,xls,bpmn"; /** @parameter expression="${generate.outputFile}" */ private String outputFile="generated.xml"; /** @parameter expression="${generate.snapshotName}" */ private String snapshotName="1.0.0-SNAPSHOT"; /** @parameter expression="${generate.functionFileName}" */ private String functionFileName="functions.txt"; /** @parameter expression="${generate.kagentChangeSetServer}" */ private String kagentChangeSetServer="http://localhost:8080/org.drools.guvnor.Guvnor/package/"; /** @parameter expression="${generate.kagentChangeSetFile}" */ private String kagentChangeSetFile="kagent-changeset.xml"; /** @parameter expression="${generate.models}" */ private Artifact[] models; private List<File> modelFiles=new ArrayList<File>(); /** * @parameter expression="${project}" * @required * @readonly */ private MavenProject project; /** @parameter expression= * "${component.org.apache.maven.artifact.factory.ArtifactFactory}" * @required * @readonly */ protected ArtifactFactory factory; /** @parameter expression= * "${component.org.apache.maven.artifact.resolver.ArtifactResolver}" * @required * @readonly */ protected ArtifactResolver artifactResolver; /** @parameter expression="${project.remoteArtifactRepositories}" * @readonly * @required */ protected List remoteRepositories; /** @parameter expression="${localRepository}" * @readonly * @required */ protected ArtifactRepository localRepository; public static void main(String[] args) throws Throwable{ ImportFileGeneratorMojo mojo=new ImportFileGeneratorMojo(); mojo.debug="true"; mojo.creator="admin"; mojo.modelFiles=new ArrayList<File>(); mojo.modelFiles.add(new File("/home/mallen/.m2/repository/commons-io/commons-io/1.4/commons-io-1.4.jar")); mojo.fileExtensions="drl,xls,bpnm2"; mojo.outputFile="target/guvnor-import.xml"; mojo.packageExclude="[0-9|.]*[.|-]+[SNAPSHOT]+[.|-]*[09|.]*"; mojo.snapshotName="1.0.0-SNAPSHOT"; mojo.path=System.getProperty("user.dir")+"/rules1"; // mojo.functionFileName=null; new ImportFileGenerator().run(mojo); } @Override public void execute() throws MojoExecutionException, MojoFailureException { addProjectDependenciesToClasspath(project); System.out.println("models="+models); System.out.println("models.count="+models.length); for(Artifact a:models){ System.out.println("model="+a); } ArtifactDownloader downloader=new ArtifactDownloader(factory, artifactResolver, remoteRepositories, localRepository); downloader.setDebug(getDebug()); for(Artifact artifact:models){ try{ File sourceFile=downloader.resolve(artifact); File targetModelFolder=new File(project.getBuild().getDirectory(), "models"); targetModelFolder.mkdirs(); File targetFile=new File(targetModelFolder, sourceFile.getName()); IOUtils.copy(new FileInputStream(sourceFile), new FileOutputStream(targetFile)); modelFiles.add(targetFile); }catch(IOException e){ getLog().error("Unable to obtain the model ["+artifact+"]", e); }catch (ArtifactResolutionException e) { getLog().error("Unable to obtain the model ["+artifact+"]", e); }catch (ArtifactNotFoundException e) { getLog().error("Unable to obtain the model ["+artifact+"]", e); } } new ImportFileGenerator().run(this); } private void addProjectDependenciesToClasspath(MavenProject project) { try { ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader(); ClassLoader newClassLoader = new ProjectClasspath().getClassLoader(project, oldClassLoader, getLog()); Thread.currentThread().setContextClassLoader(newClassLoader); } catch (DependencyResolutionRequiredException e) { getLog().info("Skipping addition of project artifacts, there appears to be a dependecy resolution problem", e); } } public boolean getDebug() {return debug!=null && debug.trim().toLowerCase().equals("true");} public boolean getDebugExtra() {return debugExtra!=null && debugExtra.trim().toLowerCase().equals("true");} public String getPath() {return path;} public String getPackageExclude() {return packageExclude;} public String getRecursive() {return recursive;} public String getCreator() {return creator;} public String getFileExtensions() {return fileExtensions;} public String getOutputFile() {return outputFile;} public String getSnapshotName() {return snapshotName;} public String getFunctionFileName() {return functionFileName;} public String getKagentChangeSetServer() {return kagentChangeSetServer;} public String getKagentChangeSetFile() {return kagentChangeSetFile;} public List<File> getModelFiles() {return modelFiles;} }